package cz.vse.integrace.iag.db;

import java.io.Serializable;
import java.util.List;
import java.util.ArrayList;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

/**
 * Třída sloužící pro reprezentaci oddělení. 
 * 
 * @author David Nejedly
 * @version 1.0
 */
@Entity
public class Oddeleni implements Serializable {
    @Id
    @GeneratedValue
    private Integer id;
    @OneToMany(cascade= CascadeType.ALL, mappedBy="oddeleni", fetch= FetchType.EAGER)
    private List<Zamestnanec> zamestnanci = new ArrayList<Zamestnanec>();
    private String nazev;
    @OneToOne
    private Zamestnanec vedouci;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * 
     * @return název oddělení
     */
    public String getNazev() {
        return nazev;
    }

    /**
     * 
     * @param nazev 
     */
    public void setNazev(String nazev) {
        this.nazev = nazev;
    }

    /**
     * 
     * @return vedoucí oddělení
     */
    public Zamestnanec getVedouci() {
        return vedouci;
    }

    /**
     * 
     * @param vedouci 
     */
    public void setVedouci(Zamestnanec vedouci) {
        this.vedouci = vedouci;
    }

    /**
     * 
     * @return všichni zaměstnaci v oddělení
     */
    public List<Zamestnanec> getZamestnanci() {
        return zamestnanci;
    }

    /**
     * 
     * @param zamestnanci zaměstnaci v oddělení
     */
    public void setZamestnanci(List<Zamestnanec> zamestnanci) {
        this.zamestnanci = zamestnanci;
    }

    /**
     * 
     * @param obj jiné oddělení
     * @return true, pokud mají obě oddělení stejný název jinak false
     */
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Oddeleni other = (Oddeleni) obj;
        if ((this.nazev == null) ? (other.nazev != null) : !this.nazev.equals(other.nazev)) {
            return false;
        }
        return true;
    }

    /**
     * 
     * @return hash na základě názvu oddělení
     */
    @Override
    public int hashCode() {
        int hash = 7;
        hash = 23 * hash + (this.nazev != null ? this.nazev.hashCode() : 0);
        return hash;
    }
    
}
